Jump To:
Technical Q&As
Mac OS X provides programming interfaces that work together to create a seamless visual environment. There are three main technologies: Quartz 2D, the graphics library that leverages the PDF drawing model; a platform-optimized OpenGL stack that handles three-dimensional graphics; and Quartz Extreme, the unique Mac OS X windowing system that brings together 2D and 3D graphics and composites 2D images, 3D images, and video in real time.

Graphics & Imaging Resources
A guided introduction and learning path for developers new to Mac OS X graphics and imaging.  
Document Descriptions
On Off
Display

Sort by
Title
Sorted by
Topic
Sort by
Date
Is ColorSync thread safe? (HTML) ()
QA1261: Discusses ColorSync thread-safety issues.
Games 2003-04-17
OpenGL Sample Code (HTML)
QA1166: Describes new naming convention for OpenGL sample code
Games 2004-12-01
OpenGL Texture Sharing Between Contexts (HTML)
QA1031: Describes the process of creating shared OpenGL contexts and sharing textures between these contexts.
Games 2001-05-01
QDFlushPortBuffer (HTML) ()
QD65: Describes a possible solution for window update problems under Carbon.
Games 2000-11-08
Setting the preferred CMM programatically? (HTML)
QA1086: Uses the NCMConcatProfileSet structure to specify the CMM to be used to make the CMWorldRef with the NCWConcatColorWorld function.
Games 2001-10-24
Updating OpenGL Contexts (HTML) ()
QA1209: When and why to update an OpenGL context in response to system and user actions.
Games 2003-06-19
Using Clip Region and Buffer Rectangles with OpenGL Carbon (HTML) ()
QA1222: Shows the basics of using buffer rectangles and clip regions with AGL.
Games 2002-12-19
Determining Open Firmware configuration variables (HTML) ()
HW56: Discusses how to determine the Open Firmware variables on a system.
Hardware 1999-03-29
Difference between using Restart or Shut Down in the Finder's Special menu in Open Firmware (HTML) ()
HW47: Explains the differences between using Restart or Shut Down on Open Firmware
Hardware 1999-02-15
Expansion ROM device properties (HTML) ()
HW50: Describes the Open Firmware properties that should be included in a boot device's expansion ROM.
Hardware 1999-03-29
Getting started with Forth (HTML) ()
HW53: Describes where FCode driver developers can get information about the Forth programming language.
Hardware 1999-03-29
IOKit Framework Headers (HTML) ()
QA1107: Describes the differences between the headers in IOKit.framework and the I/O Kit headers in Kernel.framework.
Hardware 2002-01-15
Is ColorSync thread safe? (HTML) ()
QA1261: Discusses ColorSync thread-safety issues.
Hardware 2003-04-17
Is the Open Firmware device tree object oriented? (HTML)
HW80: Discusses the object-oriented attributes of the Open Firmware device tree.
Hardware 1999-11-15
Legacy Devices (HTML)
HW84: Discusses why legacy devices with hard-wired I/O addresses may not work properly with Open Firmware.
Hardware 2000-03-20
The "packages" node in the device tree (HTML)
HW90: Describes the "packages" node in the Open Firmware device tree.
Hardware 2000-09-05
PCI Type 1 Cycles (HTML)
HW26: Describes the circumstances when the PowerMac generates a Configuration Type 1 command.
Hardware 1995-07-15
Sample code for allocating an amount of dictionary space (HTML)
HW71: Discusses the allocation and the setting of memory for Dictionary space in Open Firmware.
Hardware 1999-10-11
What is the "dump" word and how do I use it? (HTML)
HW68: Describes the function of the Open Firmware word "dump" and how it can be used.
Hardware 1999-10-11
What numeric base is the default for the Open Firmware user interface? (HTML)
HW65: Describes how the default numeric base used by the Open Firmware user interface is hexadecimal.
Hardware 1999-10-11
When to use PCMCIA, PC Card, and CardBus (HTML)
HW77: Explains the differences between PCMCIA, PC Card, and CardBus.
Hardware 1999-11-15
Why did the name of the PCI bridge change? (HTML) ()
HW59: Explains the name change of the PCI bridge to the generic name "pci" in Open Firmware.
Hardware 1999-03-29
Setting the preferred CMM programatically? (HTML)
QA1086: Uses the NCMConcatProfileSet structure to specify the CMM to be used to make the CMWorldRef with the NCWConcatColorWorld function.
Java 2001-10-24
aglChoosePixelFormat, The Inside Scoop (HTML)
OGL01: Describes the nuances of aglChoosePixelFormat, including specific information on multi-monitor support.
OpenGL 2000-04-03
Context Sharing Tips (HTML) ()
QA1248: How to correctly share OpenGL contexts and what the limits on this sharing are.
OpenGL 2003-06-24
Correct Setup of an AGLDrawable (HTML)
OGL02: Describes the setup of an AGLDrawable.
OpenGL 2000-10-04
Creating an OpenGL texture from an NSView (HTML) ()
QA1325: Addresses the issues involved with using an NSView as the source data for an OpenGL texture.
OpenGL 2004-02-13
Finding Missing OpenGL CFM Entry Points (HTML) ()
QA1225: A resolution to Mac OS X 10.2 OpenGL CFM applications which break under Mac OS X 10.1.
OpenGL 2002-12-23
GetProcAdress and OpenGL Entry Points (HTML) ()
QA1188: Technique for finding function pointers for OpenGL entry points in Cocoa and Carbon
OpenGL 2002-11-25
glFlush() vs. glFinish() (HTML)
QA1158: Explanation of the differences between glFlush() and glFinish()
OpenGL 2004-10-11
How do I determine how much VRAM is available on my video card? (HTML)
QA1168: Using Core Graphics and IOKit to find the physical size of VRAM on installed hardware.
OpenGL 2004-10-11
How do I tell if a particular display is being hardware accelerated by Quartz Extreme? (HTML) ()
QA1218: Describes how to use CGDisplayUsesOpenGLAcceleration to see if a display is accelerated or not.
OpenGL 2002-12-04
Mac OS X OpenGL Interfaces (HTML) ()
QA1269: Describes the Mac OS X specific APIs to set up and use OpenGL.
OpenGL 2003-06-19
Menus & Hardware Accelerated OpenGL under Mac OS 9 Carbon (HTML)
QA1042: Explains how to handle correctly Mac OS 9 menus when there is hardware accelerated OpenGL blitting.
OpenGL 2001-07-10
NSOpenGLView redraw problems after a window is closed and re-opened. (HTML)
QA1353: Workaround for NSOpenGLView failure to draw after its window is closed and re-opened.
OpenGL 2004-12-03
NSTimers and Rendering Loops (HTML)
QA1385: Using Cocoa timers (NSTimer) to drive a rendering loop
OpenGL 2004-10-04
OpenGL and 3D Graphics Changes in Mac OS X v10.2.3 (HTML) ()
QA1229: Mac OS X v10.2.3 OpenGL and 3D Graphics improvements
OpenGL 2003-01-03
OpenGL and 3D Graphics Changes in Mac OS X v10.2.4 (HTML) ()
QA1239: Describes the changes made in OpenGL and 3D graphics for Mac OS X v10.2.4.
OpenGL 2003-02-18
OpenGL and 3D Graphics Changes in Mac OS X v10.2.5 (HTML) ()
QA1258: Describes the changes made in OpenGL and 3D graphics for Mac OS X v10.2.5.
OpenGL 2003-04-29
OpenGL Driver Monitor Decoder Ring (HTML) ()
QA1334: Describes what each of the parameters available in the OpenGL Driver Monitor measure.
OpenGL 2004-01-30
OpenGL Sample Code (HTML)
QA1166: Describes new naming convention for OpenGL sample code
OpenGL 2004-12-01
OpenGL Texture Sharing Between Contexts (HTML)
QA1031: Describes the process of creating shared OpenGL contexts and sharing textures between these contexts.
OpenGL 2001-05-01
Setting the preferred CMM programatically? (HTML)
QA1086: Uses the NCMConcatProfileSet structure to specify the CMM to be used to make the CMWorldRef with the NCWConcatColorWorld function.
OpenGL 2001-10-24
Sharpening Full Scene Anti-Aliasing Details (HTML)
QA1268: Using full scene anti-aliasing (FSAA) in OpenGL applications.
OpenGL 2003-10-10
Updating OpenGL Contexts (HTML) ()
QA1209: When and why to update an OpenGL context in response to system and user actions.
OpenGL 2003-06-19
Using Clip Region and Buffer Rectangles with OpenGL Carbon (HTML) ()
QA1222: Shows the basics of using buffer rectangles and clip regions with AGL.
OpenGL 2002-12-19
Using Interface Builder's NSOpenGLView or Custom View objects for an OpenGL application (HTML)
QA1167: Describes usage cases for both NSOpenGLViews and Custom Views for Cocoa OpenGL applications
OpenGL 2004-10-28
Disabling a Processor on a Multiprocessor System (HTML) ()
QA1141: Describes how to disable a processor on a multiprocessor system for testing purposes.
Performance 2002-05-22
Is ColorSync thread safe? (HTML) ()
QA1261: Discusses ColorSync thread-safety issues.
Performance 2003-04-17
NSTimers and Rendering Loops (HTML)
QA1385: Using Cocoa timers (NSTimer) to drive a rendering loop
Performance 2004-10-04
Quartz 2D Thread Safety (HTML) ()
QA1238: Explains the thread-safety issues for the Quartz 2D API.
Performance 2003-02-25
Setting the preferred CMM programatically? (HTML)
QA1086: Uses the NCMConcatProfileSet structure to specify the CMM to be used to make the CMWorldRef with the NCWConcatColorWorld function.
Performance 2001-10-24
Why am I drawing directly to the screen? (HTML)
QA1015: Explains why drawing to a window's backbuffer can affect the upper left corner of the screen instead.
Performance 2004-02-19
CGContext Bounds (HTML)
QA1048: Explains how to determine the bounds of a CGContext.
Printing 2001-07-02
CGContextAddLineToPoint, CGContextAddCurveToPoint, et. al. (HTML)
QA1049: Explains why the CGContextAddXYZ APIs don't draw anything immediately.
Printing 2001-07-02
CGContextClosePath (HTML)
QA1046: Explains when you should call CGContextClosePath.
Printing 2001-10-02
Drawing a Path Multiple Times (HTML)
QA1047: Explains that path drawing operations consume the path.
Printing 2001-07-02
How do I use PMSessionGetGraphicsContext to get a CGContextRef? (HTML) ()
QA1216: Describes how to use PMSessionSetDocumentFormatGeneration and PMSessionGetGraphicsContext to get a CGContextRef for printing.
Printing 2003-02-25
How to measure CG text (HTML)
QA1051: Explains how to measure Core Graphics text.
Printing 2001-07-02
Quartz 2D Interpolation (HTML) ()
QA1186: Explains how to control Quartz 2D's image interpolation.
Printing 2002-10-29
Quartz 2D Thread Safety (HTML) ()
QA1238: Explains the thread-safety issues for the Quartz 2D API.
Printing 2003-02-25
Retain Counts of io_object_t Objects in IOKit.framework (HTML) ()
QA1195: Distinguishes between the retain counts of an I/O Kit kernel object and its io_object_t user space proxy.
Printing 2002-09-04
Saving the current Core Graphics Path (HTML)
QA1056: Explains that the Core Graphics save and restore GState APIs do not affect the path.
Printing 2001-10-02
SCSIAction and IOSCSIUserClient on Mac OS X 10.2 (HTML) ()
QA1201: Describes migrating to a new API for SCSI Parallel devices starting with Mac OS X 10.2.
Printing 2002-09-13
Tioga PostScript Printing Plugins in Mac OS X 10.2 (HTML) ()
QA1085: Why Tioga printing plugins for PostScript printing aren't called on Mac OS X 10.2 and later.
Printing 2003-07-14
Turning Off Core Graphics Clipping (HTML)
QA1050: Explains how to clear the clipping path for a CGContext.
Printing 2001-07-02
Unexpected CG state changes (HTML)
QA1045: Explains why the Core Graphics drawing state sometimes changes for no apparent reason.
Printing 2001-07-02
Why does logging keep my Printer Module from working? (HTML) ()
Deprecated - QA1182: Describes some problems with standard printf logging in a Printer Module on Jaguar.
Printing 2002-11-06
Why don't all of my PDE localizations show up in all applications? (HTML) ()
QA1185: Explains why some PDE localizations might not appear in all applications.
Printing 2002-10-16
CGBitmapContextCreate Supported Color Spaces (HTML)
QA1037: Lists the color space and alpha info combinations currently supported by CGBitmapContextCreate.
Quartz 2004-09-09
CGContext Bounds (HTML)
QA1048: Explains how to determine the bounds of a CGContext.
Quartz 2001-07-02
CGContextAddLineToPoint, CGContextAddCurveToPoint, et. al. (HTML)
QA1049: Explains why the CGContextAddXYZ APIs don't draw anything immediately.
Quartz 2001-07-02
CGContextClosePath (HTML)
QA1046: Explains when you should call CGContextClosePath.
Quartz 2001-10-02
CGImageRef contents are immutable (HTML) ()
QA1276: Explains that CGImageRef contents are considered immutable once created.
Quartz 2003-07-17
Creating color spaces that ensure color matching. (HTML)
QA1396: How to create color spaces that ensure color matching.
Quartz 2005-01-13
Debugging Graphics with QuartzDebug (HTML) ()
QA1236: Explains how to use QuartzDebug to debug graphics issues.
Quartz 2003-02-25
DeviceLoop is for drawing (HTML)
QA1024: Warns of one common misuse of the DeviceLoop API and gives two alternative solutions.
Quartz 2001-04-11
Drawing a Path Multiple Times (HTML)
QA1047: Explains that path drawing operations consume the path.
Quartz 2001-07-02
Finding an NSView's current magnification. (HTML)
QA1346: How to discover the current magnification (zoom level) of any NSView.
Quartz 2004-12-13
How can I programmatically determine the DPI of the current video mode? (HTML) ()
QA1217: Describes how to compute the DPI for a given display in a given mode using Core Graphics.
Quartz 2002-12-02
How do I determine how much VRAM is available on my video card? (HTML)
QA1168: Using Core Graphics and IOKit to find the physical size of VRAM on installed hardware.
Quartz 2004-10-11
How do I tell if a particular display is being hardware accelerated by Quartz Extreme? (HTML) ()
QA1218: Describes how to use CGDisplayUsesOpenGLAcceleration to see if a display is accelerated or not.
Quartz 2002-12-04
How do I use QuickDraw with CGDirectDisplay? (HTML)
QA1011: Explains how to draw to a CGDirectDisplay-captured display using QuickDraw.
Quartz 2001-04-11
How to measure CG text (HTML)
QA1051: Explains how to measure Core Graphics text.
Quartz 2001-07-02
Quartz 2D Interpolation (HTML) ()
QA1186: Explains how to control Quartz 2D's image interpolation.
Quartz 2002-10-29
Quartz 2D Thread Safety (HTML) ()
QA1238: Explains the thread-safety issues for the Quartz 2D API.
Quartz 2003-02-25
Saving the current Core Graphics Path (HTML)
QA1056: Explains that the Core Graphics save and restore GState APIs do not affect the path.
Quartz 2001-10-02
Setting the preferred CMM programatically? (HTML)
QA1086: Uses the NCMConcatProfileSet structure to specify the CMM to be used to make the CMWorldRef with the NCWConcatColorWorld function.
Quartz 2001-10-24
Shearing a Coordinate Space with NSAffineTransform (HTML) ()
QA1332: Describes a simple way to shear coordinate spaces by adding a few methods to the NSAffineTransform class.
Quartz 2004-01-29
SyncCGContextOriginWithPort (HTML)
QA1010: Describes how to use SyncCGContextOriginWithPort.
Quartz 2001-04-11
Turning Off Core Graphics Clipping (HTML)
QA1050: Explains how to clear the clipping path for a CGContext.
Quartz 2001-07-02
Unexpected CG state changes (HTML)
QA1045: Explains why the Core Graphics drawing state sometimes changes for no apparent reason.
Quartz 2001-07-02
Why are my Core Graphics calls drawing upside down? (HTML)
QA1009: Explains why CoreGraphics drawing comes out upside down relative to QuickDraw drawing.
Quartz 2001-04-11
Creating Sub GWorlds using QTNewGWorldFromPtr (HTML)
QA1014: Using QTNewGWorldFromPtr to create sub GWorlds which reference the pixel data of other GWorlds.
QuickTime 2001-03-20
Extracting DV Fields using QTNewGWorldFromPtr (HTML)
QA1017: Describes using QTNewGWorldFromPtr to access individual fields contained within a frame of DV source.
QuickTime 2001-03-20
Graphics Exporters - Creating 16-bit-per-channel image files (HTML)
QA1354: Discusses how to use QuickTime Graphics Exporters to create 16-bit-per-channel image files.
QuickTime 2004-06-03
Is ColorSync thread safe? (HTML) ()
QA1261: Discusses ColorSync thread-safety issues.
QuickTime 2003-04-17
LockPixels and DisposeGWorld with QTNewGWorldFromPtr (HTML)
QA1007: Clarifies some issues surrounding pointer ownership when creating GWorlds with QTNewGWorldFromPtr
QuickTime 2001-02-26
Setting the preferred CMM programatically? (HTML)
QA1086: Uses the NCMConcatProfileSet structure to specify the CMM to be used to make the CMWorldRef with the NCWConcatColorWorld function.
QuickTime 2001-10-24
Improving ATSUI Text Drawing Performance (HTML)
QA1027: Talks about one way of improving ATSUI text drawing performance.
Typography 2001-04-17